import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.security.crypto.bcrypt.BCrypt;

/**
 * TODO
 *
 * @Author huang
 * @Date 2025/6/19 2025/6/19
 */
@SpringBootTest
public class jiemi {
    /**
     * 生成BCrypt哈希密码
     * @param password 原始密码
     * @return 加密后的哈希字符串
     */
    public static String hashPassword(String password) {
        // gensalt的log_rounds参数决定了计算强度，数值越大越安全但性能越低，默认是10
        int logRounds = 12; // 可根据需要调整，建议10-14
        return BCrypt.hashpw(password, BCrypt.gensalt(logRounds));
    }

    /**
     * 验证密码是否匹配
     * @param password 待验证的原始密码
     * @param hashed 已存储的哈希密码
     * @return 如果匹配返回true，否则返回false
     */
    public static boolean verifyPassword(String password, String hashed) {
        return BCrypt.checkpw(password, hashed);
    }

    public static void main(String[] args) {
        // 测试密码
        String originalPassword = "123456";

        // 生成哈希密码
        String hashedPassword = hashPassword(originalPassword);
        System.out.println("原始密码: " + originalPassword);
        System.out.println("加密后的哈希: " + hashedPassword);

        // 验证正确密码
        boolean isPasswordCorrect = verifyPassword(originalPassword, hashedPassword);
        System.out.println("密码验证结果（正确密码）: " + isPasswordCorrect);

        // 验证错误密码
        boolean isWrongPasswordCorrect = verifyPassword("WrongPassword123", hashedPassword);
        System.out.println("密码验证结果（错误密码）: " + isWrongPasswordCorrect);

        // 演示即使相同密码，每次生成的哈希也不同
        String anotherHashedPassword = hashPassword(originalPassword);
        System.out.println("相同密码的另一个哈希: " + anotherHashedPassword);
        System.out.println("两个哈希是否相同: " + hashedPassword.equals(anotherHashedPassword));
        System.out.println("但它们都能验证原始密码: " + verifyPassword(originalPassword, anotherHashedPassword));
    }
}
